package com.sxf.redis.iredis;

import java.util.List;

/**
 * 
 * @description: list操作
 * @author: zhangyb@ccccit.com.cn 
 * @date: 2021年1月5日 下午2:16:20
 */
public interface IListRedisUtils {

	/**
	 * 添加list元素
	 * @param nameSpace
	 * @param key
	 * @param timeoutSeconds
	 * @param values
	 * @return
	 */
	boolean addList(String nameSpace, String key, long timeoutSeconds, Object[] values);

	/**
	 * 添加list元素
	 * @param key
	 * @param timeoutSeconds
	 * @param values
	 * @return
	 */
	default boolean addList(String key, long timeoutSeconds, Object[] values) {
		return addList(null, key, timeoutSeconds, values);
	}

	/**
	 * 添加list元素
	 * @param nameSpace
	 * @param key
	 * @param timeoutSeconds
	 * @param value
	 * @return
	 */
	default boolean addList(String nameSpace, String key, long timeoutSeconds, Object value) {
		return addList(nameSpace, key, timeoutSeconds, new Object[] { value });
	}

	/**
	 * 添加list元素
	 * @param key
	 * @param timeoutSeconds
	 * @param value
	 * @return
	 */
	default boolean addList(String key, long timeoutSeconds, Object value) {
		return addList(null, key, timeoutSeconds, new Object[] { value });
	}

	/**
	 * 删除list元素
	 * @param nameSpace
	 * @param key
	 * @param values
	 * @return
	 */
	boolean removeList(String nameSpace, String key, Object[] values);

	/**
	 * 删除list元素
	 * @param key
	 * @param values
	 * @return
	 */
	default boolean removeList(String key, Object[] values) {
		return removeList(null, key, values);
	}

	/**
	 * 删除list元素
	 * @param nameSpace
	 * @param key
	 * @param value
	 * @return
	 */
	default boolean removeList(String nameSpace, String key, Object value) {
		return removeList(nameSpace, key, new Object[] { value });
	}

	/**
	 * 删除list元素
	 * @param key
	 * @param value
	 * @return
	 */
	default boolean removeList(String key, Object value) {
		return removeList(null, key, new Object[] { value });
	}

	/**
	 * 清空list
	 * @param nameSpace
	 * @param key
	 */
	void clearList(String nameSpace, String key);

	/**
	 * 清空list
	 * @param key
	 */
	default void clearList(String key) {
		clearList(null, key);
	}

	/**
	 * 获取大小
	 * @param nameSpace
	 * @param key
	 * @return
	 */
	int sizeList(String nameSpace, String key);

	/**
	 * 获取大小
	 * @param key
	 * @return
	 */
	default int sizeList(String key) {
		return sizeList(null, key);
	}

	/**
	 * 判断是否为空
	 * @param nameSpace
	 * @param key
	 * @return
	 */
	boolean isEmptyList(String nameSpace, String key);

	/**
	 * 判断是否为空
	 * @param key
	 * @return
	 */
	default boolean isEmptyList(String key) {
		return isEmptyList(null, key);
	}

	/**
	 * 判断是否存在
	 * @param nameSpace
	 * @param key
	 * @return
	 */
	boolean isExistsList(String nameSpace, String key);

	/**
	 * 判断是否存在
	 * @param key
	 * @return
	 */
	default boolean isExistsList(String key) {
		return isExistsList(null, key);
	}

	/**
	 * 获取元素
	 * @param nameSpace
	 * @param key
	 * @param index
	 * @return
	 */
	Object getListElement(String nameSpace, String key, int index);

	/**
	 * 获取元素
	 * @param key
	 * @param index
	 * @return
	 */
	default Object getListElement(String key, int index) {
		return getListElement(null, key, index);
	}

	/**
	 * 获取区间值
	 * @param nameSpace
	 * @param key
	 * @param fromIndex
	 * @param toIndex
	 * @return
	 */
	List<Object> rangeList(String nameSpace, String key, int fromIndex, int toIndex);

	/**
	 * 获取区间值
	 * @param key
	 * @param fromIndex
	 * @param toIndex
	 * @return
	 */
	default List<Object> rangeList(String key, int fromIndex, int toIndex) {
		return rangeList(null, key, fromIndex, toIndex);
	}

	/**
	 * 获取当前元素位置
	 * @param nameSpace
	 * @param key
	 * @param value
	 * @return
	 */
	int indexOfList(String nameSpace, String key, Object value);

	/**
	 * 获取当前元素位置
	 * @param key
	 * @param value
	 * @return
	 */
	default int indexOfList(String key, Object value) {
		return indexOfList(null, key, value);
	}
}
